﻿namespace DimensionsHelper.Common.Contracts.Metadata;

/// <summary>
///     MDMDocument基础对象，所有成员对象都需要实现此接口。
/// </summary>
public interface IMetadataObject
{
    /// <summary>
    ///     当前元数据对象所属的元数据文档。
    /// </summary>
    IMetadataDocument Document { get; }

    /// <summary>
    ///     当前的对象类型
    /// </summary>
    ObjectType ObjectType { get; }

    /// <summary>
    ///     父对象，如果没有，此值为null。
    /// </summary>
    IMetadataObject? Parent { get; }

    /// <summary>
    ///     当前对象的版本集合，默认是null。
    /// </summary>
    IVersionObjectCollection? Versions { get; }

    /// <summary>
    ///     获取或设置当前字段是否可以随时修改。如果此属性是false，表示此字段不受<see cref="IVersion.Lock" />的影响，
    ///     可以在任意时间进行修改。
    /// </summary>
    bool Versioned { get; set; }


    /// <summary>
    ///     查找指定类型的父级对象，不包括当前类型，只返回第一个指定类型的对象。
    /// </summary>
    /// <typeparam name="T">指定实现<see cref="IMetadataObject" />的类型</typeparam>
    /// <returns>第一个符合给定类型的对象。</returns>
    T? FindParent<T>() where T : IMetadataObject;
}